#include <stdio.h>
#include <stdlib.h>
//节点结构
typedef struct ListNode{
	int data;//存放有效数据

	struct ListNode *next;//指向后继节点
	}LIST_NODE;
//链表结构
typedef struct List{
	LIST_NODE *head;//存放链表中第一个节点的地址

	int size;//记录链表中节点的个数
	}LIST;

LIST  *list_create(){
		LIST *list = malloc(sizeof(LIST));
		//初始化变量成员
		list -> head = NULL;
		list -> size = 0;
		return list;
	}
//创建节点
LIST_NODE *node_create(int data) {
		LIST_NODE *node = malloc(sizeof(LIST_NODE));
		node -> data = data;
		node -> next = NULL;
		return node;
	}
//前部插入数据
void list_insert(LIST *list,int data){
		LIST_NODE *node = node_create(data);
		node -> next = list -> head;
		list -> head = node;
		list -> size++;
	}
//遍历数据
void list_print(LIST *list){
		LIST_NODE *node = NULL;
		for(node = list -> head; node; node = node -> next){
				printf("%d ",node -> data);
			}
		printf("\n");
	}
//删除节点
void list_del(LIST *list,int data){
	//找到要删除的节点和他的上一个接待你
		LIST_NODE *node = list -> head;
		LIST_NODE *prev = NULL;//保存要删除节点的前一个节点
		while(node != NULL){
			if(node -> data == data){//找到要删除的节点
				//如果要删除的节点是链表中的第一个节点
				if(node == list -> head){
						list -> head = node -> next;
						free(node);
						node = list -> head;//指向下一个节点继续循环判断
					}else{//要删除的节点不为链表中的第一个节点
						prev -> next = node -> next;//从链表中删除node指向的节点
						free(node);
						node = prev -> next;//指向刚删除的节点的下一个节点
						}
				}else{//该节点不是我要删除的节点
					prev = node;
					node = node -> next;//指向下一个节视为额点继续循环判断
					}
				}
	}
void list_num_del(LIST *list,int pos){
	LIST_NODE *node = list -> head;
	int i = 0;
	for(node = list -> head; node ;node = node -> next){
		i++;
		if(i == pos){
			int data = node -> data;
			list_del(list,data);
			}
		}
	}
//后部插入
void list_back_insert(LIST *list,int data){
		//找到最后一个节点
		LIST_NODE *node = list -> head;
		while(node != NULL){
			if(node == NULL) break; //node指向最后一个节点
			node = node -> next;//指向下个节点，继续判断是否为最后一个节点

			}
			//创建一个新的节点
			if(node != NULL){//原链表不为空
			node -> next = node_create(data);
				}else{
					list -> head = node_create(data);
					}
	}
LIST_NODE *node_destroy(LIST_NODE *node){
		LIST_NODE *next = node -> next;
		free(node);
		return next;
	}
void list_destroy(LIST *list){
		while(list -> head){
		list -> head = node_destroy(list -> head);//清空链表，使其为空链表
		}
		free(list);
	}
void list_updata(LIST *list, int data,int change){
		LIST_NODE *node = NULL;
		for(node = list -> head; node ; node = node -> next){
			if(node -> data == data){
				node -> data = change;
				}
			}
	}
void list_search(LIST *list){
	LIST_NODE *node = list -> head;
	LIST_NODE *temp = node -> next -> next;
	while(node != NULL){
		temp;
		if(temp  == NULL){
			printf("%d",node -> data);
		}
		node = node -> next;
	}
}
int main(void){
		//创建一个空的单向链表
		LIST *list = list_create();
		//插入节点
		list_insert(list,11);
		list_insert(list,22);
		list_insert(list,33);
		list_insert(list,44);
		list_insert(list,55);
		list_insert(list,66);
		//遍历数据
		list_print(list);
		list_del(list,11);
		list_del(list,66);
		list_del(list,33);
		list_updata(list,22,99);
		list_back_insert(list,101);
		list_back_insert(list,102);
		list_back_insert(list,103);
		list_print(list);
		list_num_del(list,2);
		list_print(list);
		list_search(list);
		//销毁链表
		list_destroy(list);
		return 0;
	}
